package com.chongxinlaiguo.mapstruct.dto.convertor;

import com.chongxinlaiguo.mapstruct.dto.req.PayReqDTO;
import com.chongxinlaiguo.mapstruct.dto.req.remote.PayRemoteReqDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

/**
 * @Desc:
 * @Author: dengyanliang
 * @Date: 2025/5/24 15:51
 */
@Mapper
public interface ReqConvertor {

    ReqConvertor INSTANCE = Mappers.getMapper(ReqConvertor.class);

    // 将string字符串转化为枚举类型
    @Mapping(target = "channelEnum",expression = "java(com.chongxinlaiguo.mapstruct.dto.enums.ChannelEnum.getChannelEnum(reqDTO.getChannelCode()))")
    // 如果PayMethodEnum.getPayType中，如果有将基础对象转化为包装对象的，那么当reqDTO.getPayMethod()==null时，将会报错。所以推荐写法一，不推荐写法二
    // 写法一
    @Mapping(target = "payMethodEnum",expression = "java(reqDTO.getPayMethod() != null ? com.chongxinlaiguo.mapstruct.dto.enums.PayMethodEnum.getPayType(reqDTO.getPayMethod()) :null)")
    // 写法二
//    @Mapping(target = "payMethodEnum",expression = "java(com.chongxinlaiguo.mapstruct.dto.enums.PayMethodEnum.getPayType(reqDTO.getPayMethod()))")

    // 将string字符串转换为对象，使用JSON.parseObject方法
    @Mapping(target = "ext",expression="java(com.alibaba.fastjson.JSON.parseObject(reqDTO.getExt(),PayRemoteReqDTO.ExtendInfo.class))")
    PayRemoteReqDTO convertDTO(PayReqDTO reqDTO);
}
